import 'package:intl/intl.dart';

class DateUtil {
  // 获取当前日期，格式为 yyyy-MM-dd
  static String getCurrentDate() {
    final now = DateTime.now();
    return '${now.year}-${now.month.toString().padLeft(2, '0')}-${now.day.toString().padLeft(2, '0')}';
  }

  // 获取当前日期时间，格式为 yyyy-MM-dd HH:mm:ss
  static String getCurrentDateTime() {
    final now = DateTime.now();
    return formatDateTime(now);
  }

  // 格式化日期为 yyyy-MM-dd
  static String formatDate(DateTime date) {
    return DateFormat('yyyy-MM-dd').format(date);
  }

  // 格式化日期时间为 yyyy-MM-dd HH:mm:ss
  static String formatDateTime(DateTime date) {
    return DateFormat('yyyy-MM-dd HH:mm:ss').format(date);
  }

  // 格式化日期为中文格式，如 2023年1月1日
  static String formatDateChinese(DateTime date) {
    return DateFormat('yyyy年M月d日').format(date);
  }

  // 格式化日期为友好显示，如 今天、昨天、前天或日期
  static String formatDateFriendly(DateTime date) {
    return DateFormat('yyyy年MM月dd日').format(date);
  }

  // 解析日期字符串，格式为 yyyy-MM-dd
  static DateTime parseDate(String dateStr) {
    return DateFormat('yyyy-MM-dd').parse(dateStr);
  }

  // 解析日期时间字符串，格式为 yyyy-MM-dd HH:mm:ss
  static DateTime parseDateTime(String dateTimeStr) {
    return DateFormat('yyyy-MM-dd HH:mm:ss').parse(dateTimeStr);
  }

  // 获取一周前的日期
  static String getOneWeekAgo() {
    final now = DateTime.now();
    final oneWeekAgo = now.subtract(const Duration(days: 7));
    return formatDate(oneWeekAgo);
  }

  // 获取一个月前的日期
  static String getOneMonthAgo() {
    final now = DateTime.now();
    final oneMonthAgo = DateTime(now.year, now.month - 1, now.day);
    return '${oneMonthAgo.year}-${oneMonthAgo.month.toString().padLeft(2, '0')}-${oneMonthAgo.day.toString().padLeft(2, '0')}';
  }

  // 获取本周的开始日期（周一）
  static String getStartOfWeek() {
    final now = DateTime.now();
    final weekday = now.weekday;
    final startOfWeek = now.subtract(Duration(days: weekday - 1));
    return formatDate(startOfWeek);
  }

  // 获取本周的结束日期（周日）
  static String getEndOfWeek() {
    final now = DateTime.now();
    final weekday = now.weekday;
    final endOfWeek = now.add(Duration(days: 7 - weekday));
    return formatDate(endOfWeek);
  }

  // 获取本月的开始日期
  static String getStartOfMonth() {
    final now = DateTime.now();
    final startOfMonth = DateTime(now.year, now.month, 1);
    return formatDate(startOfMonth);
  }

  // 获取本月的结束日期
  static String getEndOfMonth() {
    final now = DateTime.now();
    final endOfMonth = DateTime(now.year, now.month + 1, 0);
    return formatDate(endOfMonth);
  }

  // 获取两个日期之间的天数
  static int daysBetween(DateTime from, DateTime to) {
    from = DateTime(from.year, from.month, from.day);
    to = DateTime(to.year, to.month, to.day);
    return (to.difference(from).inHours / 24).round();
  }
} 